package code_dateType;

/**
 * @author liuda066
 * @version 1.0
 * 1.隐式类型转换（小类型->大类型）
 *      byte->short->int->long    float->double
 * 2.强制类型转换（大类型->小类型） ：注意数据丢失，数据溢出
 *      long->int->short->byte    double->float
 * 3.不相关的类型不可以进行转换
 *      1>  boolean 和 任意类型
 *      2>  char 和double/float
 * 4.char<->int 的转换
 * 5.String<->int 的转换
 * 6.任意类型的数据在内存在存储以4字节int存储，在计算时，默认是以int类型进行运算
 *         byte num1= 10;
 *         byte num2 =20;
 *         byte num3 = (byte)(num1+num2);
 *         System.out.println(num3);
 */
public class TypeChange {
    public static void main(String[] args) {
//  1.隐式类型转换（小类型->大类型）
        int numInt = Integer.MAX_VALUE;
        long numLong1 = numInt+1;//数据溢出：先进行 int+int->int ,溢出后的数据，赋值给Long
        long numLong2 = numInt+1L;//+1L,则进行 int+Long =Long ,数据类型隐式提升，Long 赋值给Long
        System.out.println(numLong1);
        System.out.println(numLong2);
//  2.强制类型转换（大类型->小类型）
//      long->int->short->byte    double->float
        int numInt1=100;
        int numInt2=200;
        char char1=(char)numInt1;
        byte byte1=(byte)numInt2;//数据丢失
        System.out.println(char1);
        System.out.println(byte1);
//  3.不相关的类型不可以进行转换
//                *      1>  boolean 和 任意类型
//                *      2>  char 和double/float
//        boolean a =true;
//        int b = (int)a;报错

//  4.char<->int 的转换
        //char->int  隐式
        char char2 = 'a';
        int int2 = char2;
        System.out.println(int2);
        //int->char 显式
        int int3 =100;
        char char3 = (char) int3;
        System.out.println(char3);
//  5.byte<->int 的转换
        //小->大 自动转换
        byte byte0 = 120;
        int int0 = byte0;
        System.out.println(int0);
        //大->小 强制转换：注意超范围会精度丢失
        int int9 = 130;
        byte byte9= (byte) int9;
        System.out.println(byte9);
        //小于4字节的数据类型 的数据在内存在 存储以4字节int存储，在计算时，默认是以int类型进行运算
        //运算完需要进行强制类型转化（比int小的类型）
        byte num1= 10;
        byte num2 =20;
        byte num3 = (byte)(num1+num2);
        System.out.println(num3);
//  6.String<->int 的转换
    // int->String;
        //方法一：""+任意数字 = 字符串
        int numStr = 123;
        String str1=""+numStr;
        System.out.println(str1+12);
        //方法一：使用String.valueOf()方法
        String str2 = String.valueOf(numStr);
        System.out.println(str2+12);
    // String->int;
        //使用Int包装类
        String str3 = "12345";
        int num8 = Integer.parseInt(str3);
        System.out.println(num8);
        //注意错误，string只可为全数字，若有其他类型，报错
        //NumberFormatException: For input string: "12a45"
      /*  String str4 = "12a45";
        int num7 = Integer.parseInt(str4);
        System.out.println(num7);*/

    }
}
